There are currently over a million mobile applications in various application marketplaces. Users rely on these applications for a wide variety of tasks, such as posting comments on social networking sites, conducting online banking and so forth.
The mobile-application marketplace is highly competitive. As a result, developers strive to maintain and improve the quality of their applications. Lab testing provides some guidance, but is seldom sufficient, as mobile applications are highly interactive and a full range of user interactions are difficult to simulate in a lab. Further, mobile applications experience a wide variety of environmental conditions “in the field,” such as network connectivity (Wi-Fi or 3G), GPS-signal quality, and phone hardware, which can vary widely among actual users. Other conditions also factor in, e.g., some platform APIs change their behavior depending on the battery level. Such diverse conditions are difficult to reproduce in a lab.
As a result, to improve the quality of an application, the application developer/team needs to understand how an application performs in the field. However, the asynchronous, multi-threaded nature of mobile applications makes tracing application usage and application performance to gather data difficult. The difficulties are compounded by the resource limitations inherent in the mobile platform, e.g., adding tracing code that assists in monitoring application performance cannot adversely impact the user experience.